डाइमेंशनलिटी रिडक्शन के लिए Scikit-learn की फ़ीचर चयन तकनीकों पर एक व्यापक मार्गदर्शिका, जो वैश्विक डेटा विज्ञान चिकित्सकों को अधिक कुशल और मजबूत मॉडल बनाने में सशक्त बनाती है।
Scikit-learn फ़ीचर चयन: वैश्विक डेटासेट के लिए डाइमेंशनलिटी रिडक्शन में महारत हासिल करना
डेटा के लगातार विस्तार हो रहे ब्रह्मांड में, सुविधाओं की भारी मात्रा सबसे परिष्कृत मशीन लर्निंग मॉडल को भी अभिभूत कर सकती है। इस घटना को अक्सर "डाइमेंशनलिटी का अभिशाप" कहा जाता है, जो बढ़ी हुई कम्प्यूटेशनल लागत, कम मॉडल सटीकता और व्याख्यात्मकता की कम क्षमता का कारण बन सकता है। सौभाग्य से, फ़ीचर चयन और डाइमेंशनलिटी रिडक्शन तकनीकें शक्तिशाली समाधान प्रदान करती हैं। Scikit-learn, पायथन के मशीन लर्निंग इकोसिस्टम का एक आधारशिला, इन चुनौतियों का प्रभावी ढंग से समाधान करने के लिए उपकरणों का एक समृद्ध सूट प्रदान करता है, जो इसे दुनिया भर के डेटा वैज्ञानिकों के लिए एक अपरिहार्य संसाधन बनाता है।
यह व्यापक मार्गदर्शिका डाइमेंशनलिटी रिडक्शन पर ध्यान केंद्रित करते हुए, Scikit-learn की फ़ीचर चयन क्षमताओं की जटिलताओं में उतरेगी। हम विभिन्न पद्धतियों, उनके अंतर्निहित सिद्धांतों, कोड उदाहरणों के साथ व्यावहारिक कार्यान्वयन और विविध वैश्विक डेटासेट के लिए विचारों का पता लगाएंगे। हमारा लक्ष्य आपको, हमारे वैश्विक दर्शकों के लिए, जो डेटा चिकित्सकों के रूप में काम करने की इच्छा रखते हैं और अनुभवी हैं, फ़ीचर चयन के बारे में सूचित निर्णय लेने के लिए ज्ञान से लैस करना है, जिसके परिणामस्वरूप अधिक कुशल, सटीक और व्याख्यात्मक मशीन लर्निंग मॉडल होंगे।
डाइमेंशनलिटी रिडक्शन को समझना
इससे पहले कि हम Scikit-learn के विशिष्ट उपकरणों में उतरें, डाइमेंशनलिटी रिडक्शन की मूलभूत अवधारणाओं को समझना महत्वपूर्ण है। इस प्रक्रिया में डेटा को एक उच्च-आयामी स्थान से कम-आयामी स्थान में परिवर्तित करना शामिल है, जबकि यथासंभव महत्वपूर्ण जानकारी को संरक्षित किया जाता है। इसके कई लाभ हैं:
- घटा हुआ ओवरफिटिंग: कम सुविधाएँ एक सरल मॉडल का अर्थ है, जो प्रशिक्षण डेटा में शोर सीखने की संभावना कम होती है।
- तेज़ प्रशिक्षण समय: कम सुविधाओं वाले मॉडल महत्वपूर्ण रूप से जल्दी प्रशिक्षित होते हैं।
- बेहतर मॉडल व्याख्यात्मकता: कम सुविधाओं के बीच संबंधों को समझना आसान है।
- घटा हुआ स्टोरेज स्पेस: कम डाइमेंशनलिटी को कम मेमोरी की आवश्यकता होती है।
- शोर में कमी: अप्रासंगिक या अनावश्यक सुविधाओं को समाप्त किया जा सकता है, जिससे डेटा अधिक साफ़ हो जाता है।
डाइमेंशनलिटी रिडक्शन को मोटे तौर पर दो मुख्य दृष्टिकोणों में वर्गीकृत किया जा सकता है:
1. फ़ीचर चयन
इस दृष्टिकोण में मूल विशेषताओं का एक सबसेट चुनना शामिल है जो हाथ में समस्या के लिए सबसे अधिक प्रासंगिक हैं। मूल विशेषताओं को बनाए रखा जाता है, लेकिन उनकी संख्या कम हो जाती है। इसे एक नुस्खा के लिए सबसे प्रभावशाली सामग्री की पहचान करने और बाकी को छोड़ने के रूप में सोचें।
2. फ़ीचर निष्कर्षण
यह दृष्टिकोण मूल सुविधाओं को सुविधाओं के एक नए, छोटे सेट में बदल देता है। ये नई सुविधाएँ मूल लोगों के संयोजन या अनुमान हैं, जिसका लक्ष्य डेटा में सबसे महत्वपूर्ण भिन्नता या जानकारी को पकड़ना है। यह मूल सामग्री का एक आसुत सार बनाने के समान है।
Scikit-learn इन दोनों दृष्टिकोणों के लिए शक्तिशाली उपकरण प्रदान करता है। हम उन तकनीकों पर ध्यान केंद्रित करेंगे जो डाइमेंशनलिटी रिडक्शन में योगदान करती हैं, अक्सर फ़ीचर चयन या निष्कर्षण के माध्यम से।
Scikit-learn में फ़ीचर चयन के तरीके
Scikit-learn फ़ीचर चयन करने के कई तरीके प्रदान करता है। इन्हें मोटे तौर पर तीन श्रेणियों में समूहीकृत किया जा सकता है:
1. फ़िल्टर विधि
फ़िल्टर विधियाँ किसी विशिष्ट मशीन लर्निंग मॉडल से स्वतंत्र, अपनी आंतरिक गुणों के आधार पर सुविधाओं की प्रासंगिकता का आकलन करती हैं। वे आम तौर पर तेज़ और कम्प्यूटेशनल रूप से सस्ते होते हैं, जो उन्हें प्रारंभिक डेटा अन्वेषण या बहुत बड़े डेटासेट से निपटने के लिए आदर्श बनाते हैं। सामान्य मेट्रिक्स में सहसंबंध, पारस्परिक सूचना और सांख्यिकीय परीक्षण शामिल हैं।
क) सहसंबंध-आधारित फ़ीचर चयन
उन सुविधाओं को जो लक्ष्य चर के साथ अत्यधिक सहसंबद्ध हैं, उन्हें महत्वपूर्ण माना जाता है। इसके विपरीत, जो सुविधाएँ एक दूसरे के साथ अत्यधिक सहसंबद्ध हैं (मल्टीकोलिनियरिटी) अनावश्यक हो सकती हैं और उन्हें हटाने पर विचार किया जा सकता है। Scikit-learn का feature_selection मॉड्यूल इसमें सहायता करने के लिए उपकरण प्रदान करता है।
उदाहरण: भिन्नता थ्रेशोल्ड
बहुत कम भिन्नता वाली सुविधाओं से अधिक विभेदक शक्ति प्राप्त नहीं हो सकती है। VarianceThreshold क्लास उन सुविधाओं को हटा देता है जिनकी भिन्नता एक निश्चित थ्रेशोल्ड को पूरा नहीं करती है। यह संख्यात्मक विशेषताओं के लिए विशेष रूप से उपयोगी है।
from sklearn.feature_selection import VarianceThreshold
import numpy as np
X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
selector = VarianceThreshold(threshold=0.0)
selector.fit_transform(X)
# Output: array([[2, 0, 3], [1, 4, 3], [1, 1, 3]])
इस उदाहरण में, पहली सुविधा (सभी शून्य) में शून्य भिन्नता है और इसे हटा दिया गया है। यह स्थिर या लगभग स्थिर सुविधाओं को त्यागने का एक बुनियादी लेकिन प्रभावी तरीका है जो कोई भविष्य कहनेवाला शक्ति प्रदान नहीं करता है।
उदाहरण: लक्ष्य के साथ सहसंबंध (पांडा और SciPy का उपयोग करके)
हालांकि Scikit-learn में सभी फ़ीचर प्रकारों में लक्ष्य के साथ सहसंबंध के लिए कोई प्रत्यक्ष उच्च-स्तरीय फ़ंक्शन नहीं है, यह एक सामान्य प्रीप्रोसेसिंग चरण है। हम इसके लिए Pandas और SciPy का उपयोग कर सकते हैं।
import pandas as pd
import numpy as np
from scipy.stats import pearsonr
# Sample data
data = {
'feature1': np.random.rand(100),
'feature2': np.random.rand(100) * 2,
'feature3': np.random.rand(100) - 1,
'target': np.random.randint(0, 2, 100)
}
df = pd.DataFrame(data)
# Calculate Pearson correlation with the target
correlations = df.corr()['target'].drop('target')
# Select features with correlation above a certain threshold (e.g., 0.2)
selected_features = correlations[abs(correlations) > 0.2].index.tolist()
print(f"Features correlated with target: {selected_features}")
यह स्निपेट दर्शाता है कि उन सुविधाओं की पहचान कैसे करें जिनके लक्ष्य चर के साथ रैखिक संबंध हैं। बाइनरी लक्ष्यों के लिए, पॉइंट-बाइसेरियल सहसंबंध प्रासंगिक है, और श्रेणीबद्ध लक्ष्यों के लिए, अन्य सांख्यिकीय परीक्षण अधिक उपयुक्त हैं।
ख) सांख्यिकीय परीक्षण
फ़िल्टर विधियाँ सुविधाओं और लक्ष्य चर के बीच निर्भरता को मापने के लिए सांख्यिकीय परीक्षणों का भी उपयोग कर सकती हैं। ये विशेष रूप से उपयोगी होते हैं जब श्रेणीबद्ध विशेषताओं से निपटने या डेटा वितरण के बारे में विशिष्ट धारणाएँ बनाई जा सकती हैं।
Scikit-learn का feature_selection मॉड्यूल प्रदान करता है:
f_classif: वर्गीकरण कार्यों के लिए लेबल/फ़ीचर के बीच ANOVA F- मान। मानता है कि विशेषताएँ संख्यात्मक हैं और लक्ष्य श्रेणीबद्ध है।f_regression: प्रतिगमन कार्यों के लिए लेबल/फ़ीचर के बीच F-मान। मानता है कि विशेषताएँ संख्यात्मक हैं और लक्ष्य संख्यात्मक है।mutual_info_classif: एक असतत लक्ष्य चर के लिए पारस्परिक जानकारी। गैर-रैखिक संबंधों को संभाल सकता है।mutual_info_regression: एक सतत लक्ष्य चर के लिए पारस्परिक जानकारी।chi2: वर्गीकरण कार्यों के लिए गैर-नकारात्मक विशेषताओं का ची-स्क्वायर्ड आँकड़ा। श्रेणीबद्ध विशेषताओं के लिए उपयोग किया जाता है।
उदाहरण: `f_classif` और `SelectKBest` का उपयोग करना
SelectKBest एक मेटा-ट्रांसफॉर्मर है जो आपको चुने हुए स्कोरिंग फ़ंक्शन (जैसे f_classif) के आधार पर सुविधाएँ चुनने की अनुमति देता है।
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif
iris = load_iris()
X, y = iris.data, iris.target
# Select the top 2 features using f_classif
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
print(f"Selected feature names: {[iris.feature_names[i] for i in selected_indices]}")
यह उदाहरण प्रदर्शित करता है कि वर्गीकरण के लिए उनकी सांख्यिकीय महत्व के आधार पर 'k' सर्वोत्तम विशेषताओं का चयन कैसे करें। f_classif में F-मान अनिवार्य रूप से समूहों (वर्गों) के बीच भिन्नता को समूहों के भीतर भिन्नता के सापेक्ष मापता है। एक उच्च F-मान सुविधा और लक्ष्य के बीच एक मजबूत संबंध को इंगित करता है।
वैश्विक विचार: जब विभिन्न क्षेत्रों (जैसे, विविध जलवायु से सेंसर डेटा, विभिन्न आर्थिक प्रणालियों से वित्तीय डेटा) से डेटासेट के साथ काम कर रहे हैं, तो सुविधाओं के सांख्यिकीय गुण काफी भिन्न हो सकते हैं। इन सांख्यिकीय परीक्षणों (उदाहरण के लिए, ANOVA के लिए सामान्यता) की धारणाओं को समझना महत्वपूर्ण है, और पारस्परिक जानकारी जैसे गैर-पैरामीट्रिक परीक्षण विविध परिदृश्यों में अधिक मजबूत हो सकते हैं।
2. रैपर विधि
रैपर विधि सुविधा सबसेट की गुणवत्ता का मूल्यांकन करने के लिए एक विशिष्ट मशीन लर्निंग मॉडल का उपयोग करती है। वे इष्टतम विशेषताओं का सेट खोजने के लिए एक खोज रणनीति के भीतर एक मॉडल प्रशिक्षण प्रक्रिया को 'लपेटते' हैं। फ़िल्टर विधियों की तुलना में आम तौर पर अधिक सटीक होने पर, वे बार-बार मॉडल प्रशिक्षण के कारण कम्प्यूटेशनल रूप से बहुत अधिक महंगे होते हैं।
क) पुनरावर्ती फ़ीचर एलिमिनेशन (RFE)
RFE सुविधाओं को पुनरावर्ती रूप से हटाकर काम करता है। यह संपूर्ण सुविधा सेट पर एक मॉडल को प्रशिक्षित करके शुरू होता है, फिर मॉडल के गुणांक या सुविधा महत्व के आधार पर सबसे कम महत्वपूर्ण सुविधा(ओं) को हटा देता है। यह प्रक्रिया तब तक दोहराई जाती है जब तक कि सुविधाओं की वांछित संख्या तक नहीं पहुँच जाती।
from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# Generate synthetic data
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
# Use a Logistic Regression model (can be any model that supports coef_ or feature_importances_)
estimator = LogisticRegression(solver='liblinear')
# Initialize RFE to select top 5 features
selector = RFE(estimator, n_features_to_select=5, step=1)
selector = selector.fit(X, y)
X_new = selector.transform(X)
print(f"Original shape: {X.shape}")
print(f"Reduced shape: {X_new.shape}")
# To see which features were selected:
selected_indices = selector.get_support(indices=True)
print(f"Selected feature indices: {selected_indices}")
RFE शक्तिशाली है क्योंकि यह चुने हुए मॉडल द्वारा मूल्यांकन की गई सुविधाओं के बीच बातचीत पर विचार करता है। `step` पैरामीटर नियंत्रित करता है कि प्रत्येक पुनरावृत्ति पर कितनी सुविधाएँ हटाई जाती हैं।
ख) क्रमिक फ़ीचर चयन (SFS)
हालांकि Scikit-learn के कोर feature_selection में एक सीधा वर्ग नहीं है, Sequential Feature Selection एक वैचारिक दृष्टिकोण है जिसे अक्सर Scikit-learn अनुमानक का उपयोग करके लागू किया जाता है। इसमें या तो फ़ॉरवर्ड सिलेक्शन (एक खाली सेट से शुरू होकर और एक-एक करके सुविधाएँ जोड़ना) या बैकवर्ड एलिमिनेशन (सभी सुविधाओं से शुरू करना और उन्हें एक-एक करके हटाना) शामिल है। sklearn.feature_selection में Scikit-learn का SequentialFeatureSelector इसे लागू करता है।
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=20, n_informative=10, n_redundant=5, random_state=42)
estimator = LogisticRegression(solver='liblinear')
# Forward selection: add features until desired number is reached
sfs_forward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='forward', cv=5)
sfs_forward.fit(X, y)
X_new_forward = sfs_forward.transform(X)
print(f"Forward Selection - Reduced shape: {X_new_forward.shape}")
# Backward selection: start with all features and remove
sfs_backward = SequentialFeatureSelector(
estimator, n_features_to_select=10, direction='backward', cv=5)
sfs_backward.fit(X, y)
X_new_backward = sfs_backward.transform(X)
print(f"Backward Selection - Reduced shape: {X_new_backward.shape}")
SequentialFeatureSelector में cv पैरामीटर क्रॉस-वैलिडेशन को दर्शाता है, जो फीचर चयन को अधिक मजबूत बनाने और प्रशिक्षण डेटा को ओवरफिट करने की संभावना कम करने में मदद करता है। जब इन विधियों को विश्व स्तर पर लागू किया जाता है, तो यह एक महत्वपूर्ण विचार है, क्योंकि डेटा गुणवत्ता और वितरण बहुत भिन्न हो सकते हैं।
3. एम्बेडेड विधि
एम्बेडेड विधि मॉडल प्रशिक्षण प्रक्रिया के भाग के रूप में फ़ीचर चयन करती है। उनके पास रैपर विधियों की तुलना में कम्प्यूटेशनल रूप से कम खर्चीला होने का लाभ है, फिर भी सुविधा इंटरैक्शन पर विचार करते हैं। कई नियमित मॉडल इस श्रेणी में आते हैं।
क) L1 नियमितीकरण (Lasso)
Lasso (न्यूनतम निरपेक्ष सिकुड़न और चयन ऑपरेटर) जैसे मॉडल रैखिक मॉडल में L1 नियमितीकरण का उपयोग करते हैं। यह तकनीक गुणांक के निरपेक्ष मान में एक जुर्माना जोड़ती है, जो कुछ गुणांक को बिल्कुल शून्य तक ले जा सकता है। शून्य गुणांक वाली विशेषताओं को प्रभावी ढंग से हटा दिया जाता है।
from sklearn.linear_model import Lasso
from sklearn.datasets import make_regression
# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, n_informative=10, random_state=42, noise=10)
# Lasso with alpha (regularization strength)
# A higher alpha leads to more regularization and potentially more zero coefficients
lasso = Lasso(alpha=0.1, random_state=42)
lasso.fit(X, y)
# Get the number of non-zero coefficients (selected features)
non_zero_features = np.sum(lasso.coef_ != 0)
print(f"Number of features selected by Lasso: {non_zero_features}")
# To get the actual selected features:
selected_features_mask = lasso.coef_ != 0
X_new = X[:, selected_features_mask]
print(f"Reduced shape: {X_new.shape}")
LassoCV का उपयोग क्रॉस-वैलिडेशन के माध्यम से स्वचालित रूप से इष्टतम अल्फा मान खोजने के लिए किया जा सकता है।
ख) ट्री-आधारित फ़ीचर महत्व
RandomForestClassifier, GradientBoostingClassifier और ExtraTreesClassifier जैसे एन्सेम्बल विधि अंतर्निहित रूप से फ़ीचर महत्व प्रदान करते हैं। ये इस आधार पर गणना की जाती हैं कि प्रत्येक सुविधा एन्सेम्बल में पेड़ों में अशुद्धता या त्रुटि को कम करने में कितनी योगदान करती है। कम महत्व वाली सुविधाओं को हटाया जा सकता है।
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# Get feature importances
importances = model.feature_importances_
# Sort features by importance
indices = np.argsort(importances)[::-1]
print("Feature ranking:")
for f in range(X.shape[1]):
print(f"{f + 1}. feature {indices[f]} ({cancer.feature_names[indices[f]]}) - {importances[indices[f]]:.4f}")
# Select top N features (e.g., top 10)
N = 10
selected_features_mask = np.zeros(X.shape[1], dtype=bool)
selected_features_mask[indices[:N]] = True
X_new = X[:, selected_features_mask]
print(f"Reduced shape after selecting top {N} features: {X_new.shape}")
ट्री-आधारित विधियाँ शक्तिशाली हैं क्योंकि वे गैर-रैखिक संबंधों और फ़ीचर इंटरैक्शन को पकड़ सकती हैं। वे चिकित्सा निदान (उदाहरण में) से लेकर विभिन्न बाजारों में वित्तीय धोखाधड़ी का पता लगाने तक, विभिन्न डोमेन में व्यापक रूप से लागू होते हैं।
डाइमेंशनलिटी रिडक्शन के लिए फ़ीचर निष्कर्षण
जबकि फ़ीचर चयन मूल विशेषताओं को रखता है, फ़ीचर निष्कर्षण सुविधाओं का एक नया, कम सेट बनाता है। यह विशेष रूप से उपयोगी है जब मूल सुविधाएँ अत्यधिक सहसंबद्ध हों या जब आप डेटा को कम-आयामी स्थान में प्रोजेक्ट करना चाहते हैं जो सबसे अधिक भिन्नता को कैप्चर करता है।
1. प्रिंसिपल कम्पोनेंट एनालिसिस (PCA)
PCA एक रैखिक परिवर्तन तकनीक है जिसका उद्देश्य ऑर्थोगोनल अक्षों (प्रिंसिपल कंपोनेंट्स) का एक सेट ढूंढना है जो डेटा में अधिकतम भिन्नता को कैप्चर करता है। पहला प्रमुख घटक सबसे अधिक भिन्नता को कैप्चर करता है, दूसरा अगले सबसे अधिक (पहले के लिए ऑर्थोगोनल) को कैप्चर करता है, और इसी तरह। केवल पहले 'k' प्रमुख घटकों को रखकर, हम डाइमेंशनलिटी रिडक्शन प्राप्त करते हैं।
महत्वपूर्ण नोट: PCA सुविधाओं के पैमाने के प्रति संवेदनशील है। PCA को लागू करने से पहले अपने डेटा को स्केल करना (उदाहरण के लिए, StandardScaler का उपयोग करके) महत्वपूर्ण है।
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.datasets import load_wine
wine = load_wine()
X, y = wine.data, wine.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after PCA: {X_pca.shape}")
# The explained variance ratio shows how much variance each component captures
print(f"Explained variance ratio: {pca.explained_variance_ratio_}")
print(f"Total explained variance: {np.sum(pca.explained_variance_ratio_):.4f}")
PCA उच्च-आयामी डेटा को 2 या 3 आयामों में कम करके दृश्यमान बनाने के लिए उत्कृष्ट है। यह अन्वेषी डेटा विश्लेषण में एक मूलभूत तकनीक है और बाद के मॉडलिंग चरणों को महत्वपूर्ण रूप से गति दे सकती है। इसकी प्रभावशीलता छवि प्रसंस्करण और आनुवंशिकी जैसे डोमेन में देखी जाती है।
2. रैखिक विवेचक विश्लेषण (LDA)
PCA के विपरीत, जो बिना पर्यवेक्षित है और भिन्नता को अधिकतम करने का लक्ष्य रखता है, LDA एक पर्यवेक्षित तकनीक है जिसका उद्देश्य एक कम-आयामी प्रतिनिधित्व खोजना है जो वर्गों के बीच विभाज्यता को अधिकतम करता है। इसका उपयोग मुख्य रूप से वर्गीकरण कार्यों के लिए किया जाता है।
महत्वपूर्ण नोट: LDA को भी सुविधाओं को स्केल करने की आवश्यकता होती है। इसके अतिरिक्त, LDA में घटकों की संख्या अधिक से अधिक n_classes - 1 तक सीमित है।
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
# Scale the data
X_scaled = StandardScaler().fit_transform(X)
# Initialize LDA. Number of components cannot exceed n_classes - 1 (which is 2 for Iris)
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)
print(f"Original shape: {X.shape}")
print(f"Reduced shape after LDA: {X_lda.shape}")
# LDA also has explained_variance_ratio_ but it's class separability
print(f"Explained variance ratio (class separability): {lda.explained_variance_ratio_}")
LDA विशेष रूप से उपयोगी है जब लक्ष्य एक क्लासिफायर बनाना है जो आपके डेटा में विभिन्न श्रेणियों के बीच अच्छी तरह से अंतर कर सके, जो ग्राहक विभाजन या रोग वर्गीकरण जैसे कई वैश्विक अनुप्रयोगों में एक सामान्य चुनौती है।
3. t-वितरित स्टोकेस्टिक पड़ोसी एम्बेडिंग (t-SNE)
t-SNE एक गैर-रैखिक डाइमेंशनलिटी रिडक्शन तकनीक है जिसका उपयोग मुख्य रूप से उच्च-आयामी डेटासेट को दृश्यमान बनाने के लिए किया जाता है। यह उच्च-आयामी डेटा बिंदुओं को एक कम-आयामी स्थान (आमतौर पर 2D या 3D) पर मैप करके काम करता है ताकि समान बिंदुओं को कम-आयामी स्थान में समान दूरी से मॉडल किया जा सके। यह डेटा के भीतर स्थानीय संरचना और समूहों को प्रकट करने में उत्कृष्ट है।
महत्वपूर्ण नोट: t-SNE कम्प्यूटेशनल रूप से महंगा है और इसका उपयोग आमतौर पर मॉडल प्रशिक्षण के लिए प्रीप्रोसेसिंग चरण के रूप में नहीं, बल्कि विज़ुअलाइज़ेशन के लिए किया जाता है। परिणाम विभिन्न यादृच्छिक इनिशियलाइज़ेशन और पैरामीटर सेटिंग्स के साथ भी भिन्न हो सकते हैं।
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
X, y = digits.data, digits.target
# For demonstration, we'll use a subset of the data as t-SNE can be slow
subset_indices = np.random.choice(len(X), 1000, replace=False)
X_subset = X[subset_indices]
y_subset = y[subset_indices]
# Initialize t-SNE with 2 components
# perplexity is related to the number of nearest neighbors (e.g., 30 is common)
# n_iter is the number of iterations for optimization
tsne = TSNE(n_components=2, perplexity=30, n_iter=300, random_state=42)
X_tsne = tsne.fit_transform(X_subset)
print(f"Original subset shape: {X_subset.shape}")
print(f"Reduced shape after t-SNE: {X_tsne.shape}")
# Plotting the results (optional, for visualization)
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_subset, cmap='viridis', alpha=0.7)
plt.title('t-SNE visualization of Digits dataset')
plt.xlabel('t-SNE component 1')
plt.ylabel('t-SNE component 2')
plt.legend(*scatter.legend_elements(), title='Classes')
plt.show()
जीनोमिक्स या सोशल नेटवर्क विश्लेषण जैसे क्षेत्रों में सामना किए गए जटिल, उच्च-आयामी डेटा की अंतर्निहित संरचना को समझने के लिए t-SNE अमूल्य है, जो उन पैटर्न में दृश्य अंतर्दृष्टि प्रदान करता है जो अन्यथा छिपे रह सकते हैं।
वैश्विक डेटासेट के लिए सही तकनीक का चयन
उपयुक्त फ़ीचर चयन या निष्कर्षण विधि का चयन एक आकार-फिट-सभी निर्णय नहीं है। कई कारक, विशेष रूप से वैश्विक डेटासेट के लिए महत्वपूर्ण, इस चुनाव को प्रभावित करते हैं:
- डेटा की प्रकृति: क्या आपका डेटा संख्यात्मक, श्रेणीबद्ध, या मिश्रित है? क्या कोई ज्ञात वितरण हैं? उदाहरण के लिए,
chi2गैर-नकारात्मक श्रेणीबद्ध विशेषताओं के लिए उपयुक्त है, जबकिf_classifसंख्यात्मक विशेषताओं और एक श्रेणीबद्ध लक्ष्य के लिए है। - मॉडल प्रकार: रैखिक मॉडल L1 नियमितीकरण से लाभान्वित हो सकते हैं, जबकि ट्री-आधारित मॉडल स्वाभाविक रूप से महत्व प्रदान करते हैं।
- कम्प्यूटेशनल संसाधन: फ़िल्टर विधियाँ सबसे तेज़ हैं, इसके बाद एम्बेडेड विधियाँ, और फिर रैपर विधियाँ और t-SNE।
- व्याख्यात्मकता आवश्यकताएँ: यदि यह समझाना सर्वोपरि है कि *क्यों* एक भविष्यवाणी की जाती है, तो फ़ीचर चयन विधियाँ जो मूल विशेषताओं को बरकरार रखती हैं (जैसे RFE या L1) को अक्सर फ़ीचर निष्कर्षण विधियों (जैसे PCA) पर पसंद किया जाता है जो सार घटकों का निर्माण करते हैं।
- रैखिकता बनाम गैर-रैखिकता: PCA और रैखिक मॉडल रैखिक संबंधों को मानते हैं, जबकि t-SNE और ट्री-आधारित विधि गैर-रैखिक पैटर्न को कैप्चर कर सकते हैं।
- पर्यवेक्षित बनाम गैर-पर्यवेक्षित: LDA पर्यवेक्षित है (लक्ष्य चर का उपयोग करता है), जबकि PCA बिना पर्यवेक्षित है।
- पैमाना और इकाइयाँ: PCA और LDA के लिए, फ़ीचर स्केलिंग आवश्यक है। विभिन्न वैश्विक क्षेत्रों से एकत्र किए गए डेटा में पैमाने के अंतर पर विचार करें। उदाहरण के लिए, मुद्रा मान या सेंसर रीडिंग में देशों या सेंसर प्रकारों में बहुत अलग पैमाने हो सकते हैं।
- सांस्कृतिक और क्षेत्रीय बारीकियां: जब उन डेटासेट के साथ काम कर रहे हैं जिनमें मानव व्यवहार, जनसांख्यिकी, या विभिन्न सांस्कृतिक संदर्भों से भावना शामिल है, तो विशेषताओं की व्याख्या जटिल हो सकती है। एक सुविधा जो एक क्षेत्र में अत्यधिक भविष्य कहनेवाली है, वह अलग-अलग सामाजिक मानदंडों, आर्थिक स्थितियों, या डेटा संग्रह पद्धतियों के कारण दूसरे में अप्रासंगिक या यहां तक कि भ्रामक भी हो सकती है। विविध आबादी में फ़ीचर महत्व का मूल्यांकन करते समय हमेशा डोमेन विशेषज्ञता पर विचार करें।
कार्रवाई योग्य अंतर्दृष्टि:
- सरल से शुरुआत करें: त्वरित मूल्यांकन के लिए फ़िल्टर विधियों (जैसे, भिन्नता थ्रेशोल्ड, सांख्यिकीय परीक्षण) से शुरुआत करें और स्पष्ट शोर को हटा दें।
- पुनरावृति और मूल्यांकन करें: विभिन्न विधियों के साथ प्रयोग करें और उपयुक्त मेट्रिक्स और क्रॉस-वैलिडेशन का उपयोग करके अपने मॉडल के प्रदर्शन पर उनके प्रभाव का मूल्यांकन करें।
- दृश्यमान करें: अपने डेटा को कम आयामों में दृश्यमान करने के लिए PCA या t-SNE जैसी तकनीकों का उपयोग करें, जो अंतर्निहित संरचनाओं को प्रकट कर सकती हैं और आपकी फ़ीचर चयन रणनीति को सूचित कर सकती हैं।
- डोमेन विशेषज्ञता महत्वपूर्ण है: जटिल वैश्विक डेटा से निपटने के दौरान, विशेषताओं के अर्थ और प्रासंगिकता को समझने के लिए डोमेन विशेषज्ञों के साथ सहयोग करें।
- एन्सेम्बल दृष्टिकोण पर विचार करें: कभी-कभी कई फ़ीचर चयन तकनीकों को जोड़ना, एक एकल विधि पर भरोसा करने की तुलना में बेहतर परिणाम दे सकता है।
एकीकृत वर्कफ़्लो के लिए Scikit-learn की पाइपलाइन
Scikit-learn का Pipeline ऑब्जेक्ट प्रीप्रोसेसिंग चरणों, जिसमें फ़ीचर चयन/निष्कर्षण, मॉडल प्रशिक्षण के साथ एकीकृत करने के लिए असाधारण रूप से उपयोगी है। यह सुनिश्चित करता है कि आपका फ़ीचर चयन क्रॉस-वैलिडेशन के प्रत्येक गुना के भीतर लगातार किया जाता है, डेटा रिसाव को रोकता है और अधिक विश्वसनीय परिणाम उत्पन्न करता है। यह विशेष रूप से महत्वपूर्ण है जब उन मॉडलों का निर्माण किया जा रहा है जिन्हें विभिन्न वैश्विक बाजारों में तैनात किया जाएगा।
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.datasets import load_breast_cancer
bc = load_breast_cancer()
X, y = bc.data, bc.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Create a pipeline that first scales, then selects features, then trains a classifier
pipe = Pipeline([
('scaler', StandardScaler()),
('selector', SelectKBest(score_func=f_classif, k=10)),
('classifier', LogisticRegression(solver='liblinear'))
])
# Train the pipeline
pipe.fit(X_train, y_train)
# Evaluate the pipeline using cross-validation
cv_scores = cross_val_score(pipe, X_train, y_train, cv=5)
print(f"Cross-validation scores: {cv_scores}")
print(f"Average CV score: {np.mean(cv_scores):.4f}")
# Make predictions on the test set
accuracy = pipe.score(X_test, y_test)
print(f"Test set accuracy: {accuracy:.4f}")
पाइपलाइन का उपयोग करने से यह सुनिश्चित होता है कि पूरी प्रक्रिया - स्केलिंग से लेकर फ़ीचर चयन से लेकर वर्गीकरण तक - को एक ही इकाई के रूप में माना जाता है। यह मजबूत मॉडल विकास के लिए एक सर्वोत्तम अभ्यास है, खासकर जब मॉडल वैश्विक परिनियोजन के लिए अभिप्रेत हैं जहां विभिन्न डेटा वितरणों में निरंतर प्रदर्शन महत्वपूर्ण है।
निष्कर्ष
फ़ीचर चयन और निष्कर्षण के माध्यम से डाइमेंशनलिटी रिडक्शन कुशल, मजबूत और व्याख्यात्मक मशीन लर्निंग मॉडल बनाने में एक महत्वपूर्ण कदम है। Scikit-learn इन चुनौतियों से निपटने के लिए एक व्यापक टूलकिट प्रदान करता है, जो दुनिया भर के डेटा वैज्ञानिकों को सशक्त बनाता है। विभिन्न पद्धतियों—फ़िल्टर, रैपर, एम्बेडेड विधियाँ, और PCA और LDA जैसी फ़ीचर निष्कर्षण तकनीकों—को समझकर, आप अपने विशिष्ट डेटासेट और उद्देश्यों के अनुरूप सूचित निर्णय ले सकते हैं।
हमारे वैश्विक दर्शकों के लिए, विचार केवल एल्गोरिथम विकल्पों से परे हैं। डेटा की उत्पत्ति, विभिन्न क्षेत्रों में सुविधा संग्रह द्वारा पेश किए गए संभावित पूर्वाग्रहों, और स्थानीय हितधारकों की विशिष्ट व्याख्यात्मकता आवश्यकताओं को समझना महत्वपूर्ण है। Scikit-learn के Pipeline जैसे उपकरणों का उपयोग एक संरचित और पुन: पेश करने योग्य वर्कफ़्लो सुनिश्चित करता है, जो विभिन्न अंतर्राष्ट्रीय संदर्भों में विश्वसनीय AI समाधानों को तैनात करने के लिए आवश्यक है।
जैसे ही आप आधुनिक डेटा विज्ञान की जटिलताओं से गुजरते हैं, Scikit-learn की फ़ीचर चयन क्षमताओं में महारत हासिल करना निस्संदेह एक महत्वपूर्ण संपत्ति होगी, जो आपको इसकी उत्पत्ति की परवाह किए बिना, आपके डेटा की पूरी क्षमता को अनलॉक करने में सक्षम बनाएगी।